package cn.itcast.web.controller;


import cn.itcast.common.utils.Encrypt;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.ModuleService;
import cn.itcast.service.system.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
public class LoginController extends BaseController {

	@Autowired
	private UserService userService;

	@Autowired
	private ModuleService moduleService;

	/**
	 * 基于shiro登录
	 */
	@RequestMapping("/login")
	public String login(String email,String password) {
		//1.判断邮箱和密码是否为空,如果为空，重新登录
		if(StringUtils.isEmpty(email) || StringUtils.isEmpty(password)){
			request.setAttribute("error","用户名或者密码不能为空");
			return "forward:login.jsp";
		}
		try {
			//2.获取工具类subject
			Subject subject = SecurityUtils.getSubject();
			//3.调用subject的login方法，进入shiro内部完成登录
			UsernamePasswordToken token = new UsernamePasswordToken(email,password);//在shiro中，将登录的用户名密码封装成功token对象
			subject.login(token);
			//4.正常执行，登录成功(数据存入session，跳转主页)
			//通过shiro框架获取当前登录的用户对象
			User user = (User)subject.getPrincipal();//获取安全数据（用户对象）
			session.setAttribute("loginUser",user);
			List modules = moduleService.findByUser(user);
			session.setAttribute("modules",modules);
			return "home/main";
		}catch (Exception e) {
			e.printStackTrace();
			//5.抛出异常，登录失败（用户名或者密码错误）
			request.setAttribute("error","用户名或密码错误");
			return "forward:login.jsp";
		}
	}

	/**
	 * 传统登录方法
	 */
//	@RequestMapping("/login")
//	public String login(String email,String password) {
//		//1.判断邮箱和密码是否为空,如果为空，重新登录
//		if(StringUtils.isEmpty(email) || StringUtils.isEmpty(password)){
//			request.setAttribute("error","用户名或者密码不能为空");
//			return "forward:login.jsp";
//		}
//		//2.根据邮箱查询用户
//		User user = userService.findByEmail(email);
//		//对用户输入的密码加密，加密之后再比较
//		password = Encrypt.md5(password,email);
//		//3.判断用户是否为空，密码是否匹配
//		if( user ==null || !user.getPassword().equals(password)) {
//			//3.1 如果用户名或者密码错误
//			request.setAttribute("error","用户名或密码错误");
//			return "forward:login.jsp";
//		}else{
//			//3.2 密码一致，登录录成功（数据存入session，跳转主页）
//			session.setAttribute("loginUser",user);
//			//获取用户的所有可操作菜单（模块）
//			List modules = moduleService.findByUser(user);
//			session.setAttribute("modules",modules);
//			return "home/main";
//		}
//	}

    //退出
    @RequestMapping(value = "/logout",name="用户登出")
    public String logout(){
	    Subject subject = SecurityUtils.getSubject();
	    subject.logout(); //退出（清空登录数据）
	    return "forward:login.jsp";
    }

    @RequestMapping("/home")
    public String home(){
	    return "home/home";
    }
}
